﻿namespace testSingleton;
// 单例模式(Singleton Pattern)是设计模式的一种,确保一个类只有一个实例,并提供一个全局访问点
// 在C#中实现单例模式的最常见方式之一是使用静态变量和私有构造方法。
class Program
{
    static void Main(string[] args)
    {
        // 获取单例实例
        Singleton mySingleton = Singleton.Instance;
        // 使用单例的方法
        mySingleton.DoSomething();
    }
}
// sealed关键字用于防止一个类被其他类继承
public sealed class Singleton
{
    // 私有构造方法确保外部无法实例化
    private Singleton() { }
    // 方式1：显式静态字段，公开的静态属性提供一个全局访问点
    // private static readonly Singleton instance = new Singleton();
    // public static Singleton Instance => instance
    // 方式2：自动属性（更简洁)，推荐使用
    // 其实编译器帮我们优化了，会自动生成一个只读静态变量
    // 首次访问时自动创建实例，C#静态属性初始化是线程安全的
    public static Singleton Instance { get; } = new Singleton();
    // 早期c#6.0之前无法使用这种语法，为了避免线程问题需要lock双检查
    // 双重检查锁定（Double-Checked Locking）模式来实现线程安全的单例模式
    // 其他方法和属性
    public void DoSomething() => System.Console.WriteLine("单例模式");
}